#include"client.h"
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <sys/select.h>
#include <unistd.h>

int userLogin1(int sockfd,train_t *pt){
    printf("userlogin1\n");
    train_t t;
    memset(&t,0,sizeof(t));
    while(1){
        printf("请输入用户名：\n");
        char username[20];
        int ret=read(STDIN_FILENO,username,sizeof(username));
        username[ret-1]='\0';
        t.len=strlen(username);
        t.type=TASK_LOGIN_SECTION1;
        strncpy(t.buff,username,t.len);
        ret=sendn(sockfd,&t,8+t.len);

        memset(&t,0,sizeof(t));
        recvn(sockfd,&t.len,4);
        recvn(sockfd,&t.type,4);
        if(t.type==TASK_LOGIN_SECTION1_RESP_ERROR){
            printf("用户名不存在！\n");
            continue;
        }
        ret=recvn(sockfd,t.buff,t.len);
        printf("passwd=%s\n",t.buff);
        break;
    }
    memcpy(pt,&t,sizeof(t));
    return 0;
}

int userLogin2(int sockfd,train_t *pt){
    printf("userLogin2. \n");
    train_t t;
    memset(&t,0,sizeof(t));
    while(1){
        char* passwd=getpass("请输入密码：");
        printf("len=%ld\n",sizeof(passwd));
        char* encrytped=crypt(passwd,pt->buff);
        printf("Login_ps=%s\n",encrytped);
        t.len=strlen(encrytped);
        t.type=TASK_LOGIN_SECTION2;
        strncpy(t.buff,encrytped,t.len);
        int ret=sendn(sockfd,&t,8+t.len);

        memset(&t,0,sizeof(t));
        recvn(sockfd,&t.len,4);
        recvn(sockfd,&t.type,4);
        if(t.type==TASK_LOGIN_SECTION2_RESP_ERROR)
        {
            printf("密码错误！\n");
            continue;
        }else{
            recvn(sockfd,t.buff,t.len);
            printf("登录成功！\n");
            fprintf(stderr,"%s",t.buff);
            break;
        }
    }
    return 0;
}



void userRegister1(int sockfd,train_t* pt){
    printf("userRegister1\n");
    train_t t;
    memset(&t,0,sizeof(t));

    printf("请输入注册用户名:\n");
    char username[20]={0};
    int ret=read(STDIN_FILENO,username,sizeof(username));
    username[ret-1]='\0';
    t.len=strlen(username);
    t.type=TASK_REGISTER_SECTION1;
    strncpy(t.buff,username,t.len);
    ret=sendn(sockfd,&t,8+t.len);

    memset(&t,0,sizeof(t));
    recvn(sockfd,&t.len,4);
    recvn(sockfd,&t.type,4);
    recvn(sockfd,t.buff,t.len);
    if(t.type==TASK_REGISTER_SECTION1_RESP_ERROR){
        printf("用户名已存在！\n");
        exit(1);
    }

    memcpy(pt,&t,sizeof(t));
    return;

}
void userRegister2(int sockfd,train_t* pt){
    printf("userRegister2\n");
    train_t t;
    memset(&t,0,sizeof(t));
    char* passwd1=NULL;
    passwd1 =strdup(getpass("请输入密码；\n"));
    while(1){
        char* passwd2=getpass("请再次输入密码： \n");
        printf("passwd2=%s \n",passwd2);
        if(!strcmp(passwd1,passwd2)){
            break;
        }else{
            printf("密码不一致！\n");
        }
    }
    char* encrypted=crypt(passwd1,pt->buff);
    
    t.len=strlen(encrypted);
    t.type=TASK_REGISTER_SECTION2;
    strncpy(t.buff,encrypted,t.len);
    sendn(sockfd,&t,8+t.len);

    memset(&t,0,sizeof(t));
    recvn(sockfd,&t.len,4);
    recvn(sockfd,&t.type,4);
    if(t.type==TASK_REGISTER_SECTION2_RESP_OK){
        recvn(sockfd,&t.buff,t.len);
        printf("注册成功！\n");
        fprintf(stderr,"%s",t.buff);
        
    }else{
        printf("注册失败！\n");
        exit(1);
    }

} 

void login(int sockfd){
    train_t t;
    memset(&t,0,sizeof(t));
    printf("请选择        1.用户登录     2.用户注册\n");
    char flag[2] = {0};
    read(STDIN_FILENO,flag,sizeof(flag));
    printf("flag[0]=%c \n",flag[0]);
    switch(flag[0]){
    case '1' :
        userLogin1(sockfd,&t);
        userLogin2(sockfd,&t);
        break;
    case '2':
        userRegister1(sockfd,&t);
        userRegister2(sockfd,&t);
        break;
    default:
        exit(1);
    }
    return;
}

